/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */


struct ListNode* swapPairs(struct ListNode* head){
    typedef struct ListNode ListNode;
    ListNode * fake;
    fake=(ListNode*)malloc(sizeof(ListNode));
    fake->next=head;
    ListNode * cur=fake;
    while (cur->next!=NULL&&cur->next->next!=NULL){
        ListNode * temp1;
        ListNode * temp2;
        temp1=cur->next;
        temp2=cur->next->next->next;
        cur->next=cur->next->next;
        cur->next->next=temp1;//这个地方：因为此时已经2是cur->next；
        temp1->next=temp2;
        //然后因为他还需要指针后移，这个一定要知道，别忘了，当然，先把前面解决了
        cur=cur->next->next;
    }
    head=fake->next;
    free(fake);
    return(head);
}